| Conditions | 1 | 
| Paths | 1 | 
| Total Lines | 31 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 4 | ||
| Bugs | 0 | Features | 0 | 
| 1 | define(function () { | 
            ||
| 2 | let self = this;  | 
            ||
| 3 | |||
| 4 |   self.distance = function distance(a, b) { | 
            ||
| 5 | return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2);  | 
            ||
| 6 | };  | 
            ||
| 7 | |||
| 8 |   self.distancePoint = function distancePoint(a, b) { | 
            ||
| 9 | return Math.sqrt(distance(a, b));  | 
            ||
| 10 | };  | 
            ||
| 11 | |||
| 12 |   self.distanceLink = function distanceLink(p, a, b) { | 
            ||
| 13 | /* http://stackoverflow.com/questions/849211 */  | 
            ||
| 14 | let l2 = distance(a, b);  | 
            ||
| 15 |     if (l2 === 0) { | 
            ||
| 16 | return distance(p, a);  | 
            ||
| 17 | }  | 
            ||
| 18 | let t = ((p.x - a.x) * (b.x - a.x) + (p.y - a.y) * (b.y - a.y)) / l2;  | 
            ||
| 19 |     if (t < 0) { | 
            ||
| 20 | return distance(p, a);  | 
            ||
| 21 |     } else if (t > 1) { | 
            ||
| 22 | return distance(p, b);  | 
            ||
| 23 | }  | 
            ||
| 24 |     return distancePoint(p, { | 
            ||
| 25 | x: a.x + t * (b.x - a.x),  | 
            ||
| 26 | y: a.y + t * (b.y - a.y)  | 
            ||
| 27 | });  | 
            ||
| 28 | };  | 
            ||
| 29 | |||
| 30 | return self;  | 
            ||
| 31 | });  | 
            ||
| 32 |